﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ecommerce.Model;
using System.Web.UI.HtmlControls;
using Ecommerce.Web.Code;

namespace Ecommerce.Web.UserControl
{
    public partial class GaleriaProdutos : System.Web.UI.UserControl
    {
        private ProdutoModel _produtoModel = new ProdutoModel();
        private CategoriaModel _categoriaModel = new CategoriaModel();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string categoria = Request.QueryString["categoria"];//Page.RouteData.Values["categoria"] as string;
                string busca = Request.QueryString["q"];

                if (!string.IsNullOrEmpty(busca))
                    this.CarregarProdutosBusca(busca);
                else
                {
                    if (string.IsNullOrEmpty(categoria))
                        this.CarregarProdutos();
                    else
                    {
                        int identificadorCategoria;
                        if (int.TryParse(categoria, out identificadorCategoria))
                            this.CarregarProdutos(identificadorCategoria);
                        else
                            this.CarregarProdutos();
                    }
                }
            }
        }

        private void CarregarProdutos(int identificadorCategoria)
        {
            List<int> categorias = _categoriaModel.ListarFilhas(identificadorCategoria).Select(x => x.cat_idt_categoria).ToList();
            categorias.Add(identificadorCategoria);
            List<tb_pro_produto> produtos = _produtoModel.ListarPorCategoria(categorias.ToArray());

            if (produtos.Count.Equals(0))
            {
                pnProdutoNaoEncontrado.Visible = true;
            }
            else
            {
                pnProdutoNaoEncontrado.Visible = false;
                dlProdutos.DataSource = produtos;
                dlProdutos.DataBind();
            }
        }

        private void CarregarProdutos()
        {
            List<tb_pro_produto> produtos = null;

            if (_produtoModel.ListarDestaqueHome().Count >= 6)
                produtos = _produtoModel.ListarDestaqueHome().GetRange(0, 6);
            else
                produtos = _produtoModel.ListarDestaqueHome();

            if (produtos.Count > 0)
            {
                pnProdutoNaoEncontrado.Visible = false;
                dlProdutos.DataSource = produtos;
                dlProdutos.DataBind();
            }
            else
            {
                pnProdutoNaoEncontrado.Visible = true;
            }
        }

        private void CarregarProdutosBusca(string busca)
        {
            List<tb_pro_produto> produtos = _produtoModel.ListarPorNome(busca);
            if (produtos.Count > 0)
            {
                pnProdutoNaoEncontrado.Visible = false;
                dlProdutos.DataSource = produtos;
                dlProdutos.DataBind();
            }
            else
            {
                pnProdutoNaoEncontrado.Visible = true;
            }
        }

        protected void dlProdutos_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
            {
                tb_pro_produto item = (tb_pro_produto)e.Item.DataItem;

                HtmlGenericControl dvNomeProduto = (HtmlGenericControl)e.Item.FindControl("dvNomeProduto");
                HtmlGenericControl dvDescProduto = (HtmlGenericControl)e.Item.FindControl("dvDescProduto");
                HtmlGenericControl dvPrecoProduto = (HtmlGenericControl)e.Item.FindControl("dvPrecoProduto");
                HyperLink hlDetalhesProduto = (HyperLink)e.Item.FindControl("hlDetalhesProduto");
                Image imgProduto = (Image)e.Item.FindControl("imgProduto");
                LinkButton lkbAdicionar = (LinkButton)e.Item.FindControl("lkbAdicionar");

                dvNomeProduto.InnerText = item.pro_nom_produto;
                dvDescProduto.InnerText = item.pro_des_abreviada;

                if (new Services().TipoUsuarioLogado == Services.TipoPessoa.PFI || new Services().TipoUsuarioLogado == Services.TipoPessoa.PJU)
                    dvPrecoProduto.InnerText = item.pro_vlr_preco_consumidor.ToString("c");
                else
                    dvPrecoProduto.InnerText = item.pro_vlr_preco_revenda.ToString("c");

                hlDetalhesProduto.NavigateUrl = "~/Produtos/Detalhes.aspx?codigo=" + Server.UrlEncode(item.pro_cod_produto);
                lkbAdicionar.CommandArgument = item.pro_cod_produto + "#" + dvPrecoProduto.InnerText;

                tb_ipr_imagem_produto imagemProduto = item.tb_ipr_imagem_produto.Where(x => x.ipr_num_ordem_imagem.Equals(1)).FirstOrDefault();

                if (imagemProduto != null)
                    imgProduto.ImageUrl = imagemProduto.ipr_des_caminho_virtual;
                else
                    imgProduto.ImageUrl = "~/images/imagem_nao_disp_home.jpg";

            }
        }

        protected void dlProdutos_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName.Equals("Adicionar"))
            {
                string[] argumento = ((LinkButton)e.CommandSource).CommandArgument.Split('#');
                string codigoProduto = argumento[0];
                tb_pro_produto produto = _produtoModel.ObterPorCodigo(Server.UrlDecode(codigoProduto));

                Carrinho.Instance.Adicionar(produto, 1, decimal.Parse(argumento[1].Replace("R$", "")));

                Response.Redirect("~/CarrinhoCompras.aspx");
            }
        }
    }
}